const express = require('express');
const adminRouter = express.Router();
// 引入adminListModel
const adminListModel = require('../db/model/adminListModel')
// app.use(express.urlencoded({extended:false}))
// 引入utils
const {md5,encode,decode} = require('../utils')
// 引入验证登录的中间件
const checkLogin = require('../middleware/checkLogin')
adminRouter.post('/addAdmin',checkLogin, async (request, response)=>{
    // 1. 接收数据
    // 2. 验证
    //    2-1 两次面是否一致
    //         1. 不一致 {code:1,msg:'两次密码不一致'}
    //    2-2 用户名是否已存在
    //         1. 存在   {code:1,msg:'用户已存在'}
    // 3. 将数据插入数据库 用户名 密码
    //    3-1  密码 加密处理 npm 第三方库  md5 不可逆
    //    3-2  将用户名 加密后的密码 入库
    let {adminName,password,rePassword} = request.body
    if(password !== rePassword){
        response.json({
            code:1,
            msg:'两次密码不一致'
        })
        return
    }
    let result = await adminListModel.findOne({adminName})
    // 用户名存在
    if(result){
        response.json({code:1,msg:'用户已存在'})
        return;
    }
    // 对密码进行加密
    password = md5(password)
    // 插入数据库
    try{
        adminListModel.create({adminName,password})
        console.log(222);
        response.json({
            code:0,
            msg:'注册成功'
        })
        return
    }catch(e){
        response.json({
            code:2,
            msg:'网络连接异常，请检查'
        })
        return
    }

})

adminRouter.get('/adminList',checkLogin ,async (request, response)=>{
    try{
        let adminList = await adminListModel.find({});
        response.json({
            code:0,
            msg:'管理员列表获取成功',
            data:{adminList}
        })
    }catch(e){
        response.json({
            code:2,
            msg:'网络连接异常'
        })
    }
})
/**
 * 根据 _id 删除管理员
 */
adminRouter.get('/deleteAdmin',checkLogin,async (request,response)=>{
    let {_id} = request.query
    try{
        await adminListModel.deleteOne({_id})
        response.json({
            code:0,
            msg:'删除成功'
        })
    }catch(e){
        response.json({
            code:1,
            msg:'删除失败'
        })
    }
})

adminRouter.post('/login',async (request,response)=>{
    // 1. 获取前端请求的数据
    // 2. 对密码进行加密
    // 3. 用用户名和密码为条件去数据库查找
    let {adminName, password} = request.body
    password = md5(password)
    // select {adminName:true,password:0}
    let result = await adminListModel.findOne({adminName,password}).select({password:0}).exec()
    if(result){
        // 用户名密码正确,生成token
        let token = encode({adminName:result.adminName})
        response.json({
            code:0,
            msg:'登录成功',
            data:{token}
        })

    }else{//result => null
        // 用户名或密码错误
        response.json({
            code:1,
            msg:'用户名或密码错误'
        })
    }
})
/**
 * 退出登录
 */
adminRouter.get('/logout',checkLogin ,(request,response)=>{
    response.json({
        code:0,
        msg:'退出成功'
    })
})

module.exports = adminRouter;